#include "BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h"
#ifdef __cplusplus
extern "C" {
#endif
btConvex2dConvex2dAlgorithm::CreateFunc* bullet_NewbtConvex2dConvex2dAlgorithmCreateFunc(btVoronoiSimplexSolver* simplexSolver,btConvexPenetrationDepthSolver* pdSolver){
	btVoronoiSimplexSolver * c_arg_simplexSolver=(btVoronoiSimplexSolver *)(void*)(simplexSolver);
	btConvexPenetrationDepthSolver * c_arg_pdSolver=(btConvexPenetrationDepthSolver *)(void*)(pdSolver);
	btConvex2dConvex2dAlgorithm::CreateFunc* wrap_out = new btConvex2dConvex2dAlgorithm::CreateFunc(c_arg_simplexSolver,c_arg_pdSolver);
	return wrap_out;
}

int bullet_btConvex2dConvex2dAlgorithmCreateFunc_GetFieldOfM_minimumPointsPerturbationThreshold(btConvex2dConvex2dAlgorithm::CreateFunc* c_this){
	return (int)(c_this->m_minimumPointsPerturbationThreshold);
}

int bullet_btConvex2dConvex2dAlgorithmCreateFunc_GetFieldOfM_numPerturbationIterations(btConvex2dConvex2dAlgorithm::CreateFunc* c_this){
	return (int)(c_this->m_numPerturbationIterations);
}

btVoronoiSimplexSolver** bullet_btConvex2dConvex2dAlgorithmCreateFunc_GetFieldOfM_simplexSolver(btConvex2dConvex2dAlgorithm::CreateFunc* c_this){
	return (btVoronoiSimplexSolver**)(&c_this->m_simplexSolver);
}

btConvex2dConvex2dAlgorithm* bullet_NewbtConvex2dConvex2dAlgorithm(btPersistentManifold* mf,btCollisionAlgorithmConstructionInfo* ci,btCollisionObjectWrapper* body0Wrap,btCollisionObjectWrapper* body1Wrap,btVoronoiSimplexSolver* simplexSolver,btConvexPenetrationDepthSolver* pdSolver,int numPerturbationIterations,int minimumPointsPerturbationThreshold){
	btPersistentManifold * c_arg_mf=(btPersistentManifold *)(void*)(mf);
	btCollisionAlgorithmConstructionInfo const& c_arg_ci=(btCollisionAlgorithmConstructionInfo const&)(*ci);
	btCollisionObjectWrapper const * c_arg_body0Wrap=(btCollisionObjectWrapper const *)(void*)(body0Wrap);
	btCollisionObjectWrapper const * c_arg_body1Wrap=(btCollisionObjectWrapper const *)(void*)(body1Wrap);
	btVoronoiSimplexSolver * c_arg_simplexSolver=(btVoronoiSimplexSolver *)(void*)(simplexSolver);
	btConvexPenetrationDepthSolver * c_arg_pdSolver=(btConvexPenetrationDepthSolver *)(void*)(pdSolver);
	int c_arg_numPerturbationIterations=numPerturbationIterations;
	int c_arg_minimumPointsPerturbationThreshold=minimumPointsPerturbationThreshold;
	btConvex2dConvex2dAlgorithm* wrap_out = new btConvex2dConvex2dAlgorithm(c_arg_mf,c_arg_ci,c_arg_body0Wrap,c_arg_body1Wrap,c_arg_simplexSolver,c_arg_pdSolver,c_arg_numPerturbationIterations,c_arg_minimumPointsPerturbationThreshold);
	return wrap_out;
}

btPersistentManifold* bullet_btConvex2dConvex2dAlgorithm_getManifold(btConvex2dConvex2dAlgorithm* c_this){
	btPersistentManifold const * c_out = c_this->getManifold();
	btPersistentManifold* wrap_out = (btPersistentManifold*)(void*)(c_out);
	return wrap_out;
}

void bullet_btConvex2dConvex2dAlgorithm_setLowLevelOfDetail(btConvex2dConvex2dAlgorithm* c_this,bool useLowLevel){
	bool c_arg_useLowLevel=useLowLevel;
	c_this->setLowLevelOfDetail(c_arg_useLowLevel);
}

#ifdef __cplusplus
}
#endif
